import { Entity, Column, Index } from "typeorm";
import { BaseEntity } from "@/common/entities/base.entity";

/**
 * API请求实体
 * 用于存储API请求数据，包括请求详情、响应信息和性能指标
 */
@Entity("api_requests")
export class ApiRequestEntity extends BaseEntity {
  /**
   * 用户ID
   * 发起API请求的用户唯一标识，可为空表示未登录用户
   */
  @Column({ type: "varchar", length: 64, nullable: true, comment: "用户ID" })
  @Index("idx_user_id")
  userId: string;

  /**
   * HTTP请求方法
   * API请求的HTTP方法，如：GET、POST、PUT、DELETE等
   */
  @Column({ type: "varchar", length: 10, comment: "HTTP请求方法" })
  method: string;

  /**
   * API请求URL
   * 完整的API请求地址，包括路径和查询参数
   */
  @Column({ type: "varchar", length: 500, comment: "API请求URL" })
  apiUrl: string;

  /**
   * 状态码
   * API响应的HTTP状态码，如：200、404、500等
   */
  @Column({ type: "int", nullable: true, comment: "HTTP状态码" })
  statusCode: number;

  /**
   * 请求时间
   * API请求实际发起的时间
   */
  @Column({ type: "datetime", nullable: true, comment: "请求时间" })
  requestTime: Date;

  /**
   * 响应时间（毫秒）
   * 从请求发起到收到完整响应的总时间，单位为毫秒
   */
  @Column({ type: "int", nullable: true, comment: "响应时间（毫秒）" })
  responseTime: number;

  /**
   * 请求头
   * API请求的请求头信息，JSON格式存储
   */
  @Column({ type: "text", nullable: true, comment: "请求头信息(JSON格式)" })
  requestHeaders: string;

  /**
   * 响应头
   * API响应的响应头信息，JSON格式存储
   */
  @Column({ type: "text", nullable: true, comment: "响应头信息(JSON格式)" })
  responseHeaders: string;

  /**
   * 请求体
   * API请求的请求体数据，JSON格式存储
   */
  @Column({ type: "text", nullable: true, comment: "请求体数据(JSON格式)" })
  requestBody: string;

  /**
   * 响应体
   * API响应的响应体数据，JSON格式存储
   */
  @Column({ type: "text", nullable: true, comment: "响应体数据(JSON格式)" })
  responseBody: string;

  /**
   * 浏览器类型
   * 用户使用的浏览器名称和版本，如：Chrome/91.0.4472.124
   */
  @Column({ type: "varchar", length: 50, nullable: true, comment: "浏览器类型" })
  browser: string;

  /**
   * 操作系统
   * 用户设备的操作系统信息，如：Windows 10, macOS 11.2.3
   */
  @Column({ type: "varchar", length: 50, nullable: true, comment: "操作系统" })
  os: string;

  /**
   * IP地址
   * 用户的IP地址，用于地理位置分析
   */
  @Column({ type: "varchar", length: 45, nullable: true, comment: "IP地址" })
  ipAddress: string;

  /**
   * 用户代理字符串
   * 完整的User-Agent字符串，包含设备、浏览器、操作系统等详细信息
   */
  @Column({ type: "text", nullable: true, comment: "用户代理字符串" })
  userAgent: string;
}